package src.Aula07.Ex02;

import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class Jogo {
    private static Equipa equipa1, equipa2;
    private static Bola bola;
    private static int duracaoJogo; // segundos
    private static int tempoDecorrido; // segundos

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        inputDefinicoesIniciais(sc);

        System.out.println("Jogo iniciado!");
        System.out.println();

        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                tempoDecorrido++; // A cada segundo, acrescentar 1 a tempoDecorrido
                if (tempoDecorrido == duracaoJogo) {
                    System.out.println();
                    System.out.println();
                    System.out.println("Fim do tempo! Jogo terminado!");
                    System.out.println(equipa1);
                    System.out.println(equipa2);

                    if (equipa1.getTotalGolosMarcados() > equipa2.getTotalGolosMarcados())
                        System.out.println("Vencedor: " + equipa1.getNome());
                    else if (equipa2.getTotalGolosMarcados() > equipa1.getTotalGolosMarcados())
                        System.out.println("Vencedor: " + equipa2.getNome());
                    else
                        System.out.println("Empate!");

                    sc.close();
                    return;
                }
            }
        };
        timer.schedule(task, 0, 1000); // Executar run() a cada 1000 milisegundos = 1 segundo

        while (true) {
            System.out.println("1 - Ver estado atual do jogo");
            System.out.println("2 - Mover bola");
            System.out.println("Equipa " + equipa1.getNome());
            System.out.println("3 - Mover robo");
            System.out.println("4 - Marcar golo");
            System.out.println("Equipa " + equipa2.getNome());
            System.out.println("5 - Mover robo");
            System.out.println("6 - Marcar golo");
            System.out.print("Acao: ");

            int acao = sc.nextInt();
            sc.nextLine();

            switch (acao) {
            case 1:
                System.out.println();
                System.out.println("Tempo decorrido (segundos): " + tempoDecorrido);
                System.out.println("Duracao do Jogo (segundos): " + duracaoJogo);
                System.out.println(equipa1);
                System.out.println(equipa2);
                System.out.println(bola);
                break;
            case 2:
                System.out.print("Nova coordenada x: ");
                double x1 = sc.nextDouble();
                System.out.print("Nova coordenada y: ");
                double y1 = sc.nextDouble();
                System.out.println("Distancia percorrida: " + bola.move(x1, y1));
                break;
            case 3:
                System.out.print("Id do robo: ");
                String id1 = sc.nextLine();
                System.out.print("Nova coordenada x: ");
                double x2 = sc.nextDouble();
                System.out.print("Nova coordenada y: ");
                double y2 = sc.nextDouble();
                for (Robo robo : equipa1.getRobos())
                    if (robo.getId().equals(id1)) {
                        System.out.println("Distancia percorrida: " + robo.move(x2, y2));
                        break;
                    }
                break;
            case 4:
                System.out.print("Id do robo: ");
                String id2 = sc.nextLine();
                for (Robo robo : equipa1.getRobos())
                    if (robo.getId().equals(id2)) {
                        robo.MarcarUmGolo();
                        equipa1.AdicionarGoloMarcado();
                        equipa2.AdicionarGoloSofrido();
                        break;
                    }
                break;
            case 5:
                System.out.print("Id do robo: ");
                String id3 = sc.nextLine();
                System.out.print("Nova coordenada x: ");
                double x3 = sc.nextDouble();
                System.out.print("Nova coordenada y: ");
                double y3 = sc.nextDouble();
                for (Robo robo : equipa2.getRobos())
                    if (robo.getId().equals(id3)) {
                        System.out.println("Distancia percorrida: " + robo.move(x3, y3));
                        break;
                    }
                break;
            case 6:
                System.out.print("Id do robo: ");
                String id4 = sc.nextLine();
                for (Robo robo : equipa2.getRobos())
                    if (robo.getId().equals(id4)) {
                        robo.MarcarUmGolo();
                        equipa2.AdicionarGoloMarcado();
                        equipa1.AdicionarGoloSofrido();
                        break;
                    }
                break;
            }
            System.out.println();
        }
    }

    public static void inputDefinicoesIniciais(Scanner sc) {
        for (int i = 1; i <= 2; i++) { // 2 equipas
            System.out.println("Equipa " + i);
            System.out.print("Nome: ");
            String nomeEquipa = sc.nextLine();
            System.out.print("Nome do responsavel: ");
            String nomeResponsavel = sc.nextLine();

            Robo[] robos = new Robo[3];
            for (int j = 1; j <= 3; j++) {
                System.out.println("Robo " + j);
                System.out.print("Id: ");
                String id = sc.nextLine();
                System.out.print("Coordenada x: ");
                double x = sc.nextDouble();
                System.out.print("Coordenada y: ");
                double y = sc.nextDouble();
                sc.nextLine();
                System.out.print("Tipo de jogador (GuardaRedes, Avancado, Defesa, Medio): ");
                String tipoJogador = sc.nextLine();
                robos[j - 1] = new Robo(x, y, id, tipoJogador);

            }

            switch (i) {
            case 1:
                equipa1 = new Equipa(nomeEquipa, nomeResponsavel, robos);
                break;
            case 2:
                equipa2 = new Equipa(nomeEquipa, nomeResponsavel, robos);
                break;
            }
            System.out.println();
        }

        System.out.println();

        System.out.println("Bola");
        System.out.print("Coordenada x: ");
        int x = sc.nextInt();
        System.out.print("Coordenada y: ");
        int y = sc.nextInt();
        System.out.print("Cor: ");
        sc.nextLine();
        String cor = sc.nextLine();
        bola = new Bola(x, y, cor);

        System.out.println();

        System.out.print("Tempo de jogo (segundos): ");
        duracaoJogo = sc.nextInt();

        System.out.println();

        tempoDecorrido = 0;
    }

}
